package com.piggy.logi.sys.service;


import com.piggy.common.core.web.base.BaseResponse;
import com.piggy.common.core.web.page.IServicePlus;
import com.piggy.common.core.web.page.TableDataInfo;
import com.piggy.logi.sys.bo.LogiScheduleExtEditBo;
import com.piggy.logi.sys.bo.LogiScheduleQueryBo;
import com.piggy.logi.sys.bo.OperationDispatchCarQueryBo;
import com.piggy.logi.sys.bo.OperationDispatchQueryBo;
import com.piggy.logi.sys.domain.LogiSchedule;
import com.piggy.logi.sys.enums.WaybillStatusEnum;
import com.piggy.logi.sys.vo.LogiScheduleExtVo;
import com.piggy.logi.sys.vo.LogiScheduleVo;

import java.util.Collection;
import java.util.List;

/**
 * 调度车次信息Service接口
 *
 * @author piggy
 * @date 2023-09-06
 */
public interface ILogiScheduleService extends IServicePlus<LogiSchedule>, BaseResponse {
    /**
     * 查询单个
     *
     * @return
     */
    LogiScheduleExtVo queryById(Long scheduleId);

    /**
     * 查询列表
     */
    TableDataInfo<LogiScheduleExtVo> queryPageList(LogiScheduleQueryBo bo);

    /**
     * 查询列表
     */
    List<LogiScheduleExtVo> queryList(LogiScheduleQueryBo bo);

    /**
     * 查询列表
     */
    List<LogiScheduleExtVo> queryList(LogiScheduleQueryBo bo, boolean ignoreWaybill);

    /**
     * 根据新增业务对象插入调度车次信息
     *
     * @param bo 调度车次信息新增业务对象
     * @return
     */
    LogiScheduleExtVo save(LogiScheduleExtEditBo bo);

    /**
     * 根据编辑业务对象修改调度车次信息
     *
     * @param bo 调度车次信息编辑业务对象
     * @return
     */
    LogiScheduleExtVo updateByEditBo(LogiScheduleExtEditBo bo);

    /**
     * 校验并删除数据
     *
     * @param ids     主键集合
     * @param isValid 是否校验,true-删除前校验,false-不校验
     * @return
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    List<LogiScheduleVo> getByCarIds(List<Long> carIds);


    /**
     * 运营管理-查询待发车次列表
     */
    TableDataInfo<LogiScheduleExtVo> dispatchCarList(OperationDispatchCarQueryBo queryBo);

    /**
     * 运营管理-车次详情-发车
     */
    void depart(String scheduleNo);

    /**
     * 运营管理-车次详情-取消发车
     */
    void cancelDepart(String scheduleNo);

    /**
     * 运营管理-车次详情-到达
     */
    void arrived(String scheduleNo);

    /**
     * 运营管理-车次详情-取消到达
     */
    void cancelArrived(String scheduleNo);

    /**
     * 运营管理-车次详情-取消调度
     */
    void cancelScheduled(String scheduleNo);

    /**
     * 运营管理-车次详情-完成
     */
    void completed(String scheduleNo);

    /**
     * 运营管理-车次详情-查询待发车次详情-装载
     */
    TableDataInfo<LogiScheduleExtVo> scheduleCarLoad(OperationDispatchQueryBo queryBo);

}
